home *** CD-ROM | disk | FTP | other *** search
/ Software of the Month Club 2000 October / Software of the Month - Ultimate Collection Shareware 277.iso / pc / PROGRAMS / UTILITY / WINLINUX / DATA1.CAB / programs_-_gtk / INCLUDE / GTK / GTKCTREE.H < prev    next >
C/C++ Source or Header  |  1999-09-17  |  16KB  |  440 lines

  1. /* GTK - The GIMP Toolkit
  2.  * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball, Josh MacDonald
  3.  * Copyright (C) 1997-1998 Jay Painter <jpaint@serv.net><jpaint@gimp.org>
  4.  *
  5.  * GtkCTree widget for GTK+
  6.  * Copyright (C) 1998 Lars Hamann and Stefan Jeske
  7.  *
  8.  * This library is free software; you can redistribute it and/or
  9.  * modify it under the terms of the GNU Library General Public
  10.  * License as published by the Free Software Foundation; either
  11.  * version 2 of the License, or (at your option) any later version.
  12.  *
  13.  * This library is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  16.  * Library General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU Library General Public
  19.  * License along with this library; if not, write to the
  20.  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  21.  * Boston, MA 02111-1307, USA.
  22.  */
  23.  
  24. /*
  25.  * Modified by the GTK+ Team and others 1997-1999.  See the AUTHORS
  26.  * file for a list of people on the GTK+ Team.  See the ChangeLog
  27.  * files for a list of changes.  These files are distributed with
  28.  * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
  29.  */
  30.  
  31. #ifndef __GTK_CTREE_H__
  32. #define __GTK_CTREE_H__
  33.  
  34. #include <gtk/gtkclist.h>
  35.  
  36. #ifdef __cplusplus
  37. extern "C" {
  38. #endif                /* __cplusplus */
  39.  
  40. #define GTK_TYPE_CTREE            (gtk_ctree_get_type ())
  41. #define GTK_CTREE(obj)            (GTK_CHECK_CAST ((obj), GTK_TYPE_CTREE, GtkCTree))
  42. #define GTK_CTREE_CLASS(klass)    (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_CTREE, GtkCTreeClass))
  43. #define GTK_IS_CTREE(obj)         (GTK_CHECK_TYPE ((obj), GTK_TYPE_CTREE))
  44. #define GTK_IS_CTREE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_CTREE))
  45.  
  46. #define GTK_CTREE_ROW(_node_) ((GtkCTreeRow *)(((GList *)(_node_))->data))
  47. #define GTK_CTREE_NODE(_node_) ((GtkCTreeNode *)((_node_)))
  48. #define GTK_CTREE_NODE_NEXT(_nnode_) ((GtkCTreeNode *)(((GList *)(_nnode_))->next))
  49. #define GTK_CTREE_NODE_PREV(_pnode_) ((GtkCTreeNode *)(((GList *)(_pnode_))->prev))
  50. #define GTK_CTREE_FUNC(_func_) ((GtkCTreeFunc)(_func_))
  51.  
  52. typedef enum
  53. {
  54.   GTK_CTREE_POS_BEFORE,
  55.   GTK_CTREE_POS_AS_CHILD,
  56.   GTK_CTREE_POS_AFTER
  57. } GtkCTreePos;
  58.  
  59. typedef enum
  60. {
  61.   GTK_CTREE_LINES_NONE,
  62.   GTK_CTREE_LINES_SOLID,
  63.   GTK_CTREE_LINES_DOTTED,
  64.   GTK_CTREE_LINES_TABBED
  65. } GtkCTreeLineStyle;
  66.  
  67. typedef enum
  68. {
  69.   GTK_CTREE_EXPANDER_NONE,
  70.   GTK_CTREE_EXPANDER_SQUARE,
  71.   GTK_CTREE_EXPANDER_TRIANGLE,
  72.   GTK_CTREE_EXPANDER_CIRCULAR
  73. } GtkCTreeExpanderStyle;
  74.  
  75. typedef enum
  76. {
  77.   GTK_CTREE_EXPANSION_EXPAND,
  78.   GTK_CTREE_EXPANSION_EXPAND_RECURSIVE,
  79.   GTK_CTREE_EXPANSION_COLLAPSE,
  80.   GTK_CTREE_EXPANSION_COLLAPSE_RECURSIVE,
  81.   GTK_CTREE_EXPANSION_TOGGLE,
  82.   GTK_CTREE_EXPANSION_TOGGLE_RECURSIVE
  83. } GtkCTreeExpansionType;
  84.  
  85. typedef struct _GtkCTree      GtkCTree;
  86. typedef struct _GtkCTreeClass GtkCTreeClass;
  87. typedef struct _GtkCTreeRow   GtkCTreeRow;
  88. typedef struct _GtkCTreeNode  GtkCTreeNode;
  89.  
  90. typedef void (*GtkCTreeFunc) (GtkCTree     *ctree,
  91.                   GtkCTreeNode *node,
  92.                   gpointer      data);
  93.  
  94. typedef gboolean (*GtkCTreeGNodeFunc) (GtkCTree     *ctree,
  95.                                        guint         depth,
  96.                                        GNode        *gnode,
  97.                        GtkCTreeNode *cnode,
  98.                                        gpointer      data);
  99.  
  100. typedef gboolean (*GtkCTreeCompareDragFunc) (GtkCTree     *ctree,
  101.                                              GtkCTreeNode *source_node,
  102.                                              GtkCTreeNode *new_parent,
  103.                                              GtkCTreeNode *new_sibling);
  104.  
  105. struct _GtkCTree
  106. {
  107.   GtkCList clist;
  108.   
  109.   GdkGC *lines_gc;
  110.   
  111.   gint tree_indent;
  112.   gint tree_spacing;
  113.   gint tree_column;
  114.  
  115.   guint line_style     : 2;
  116.   guint expander_style : 2;
  117.   guint show_stub      : 1;
  118.  
  119.   GtkCTreeCompareDragFunc drag_compare;
  120. };
  121.  
  122. struct _GtkCTreeClass
  123. {
  124.   GtkCListClass parent_class;
  125.   
  126.   void (*tree_select_row)   (GtkCTree     *ctree,
  127.                  GtkCTreeNode *row,
  128.                  gint          column);
  129.   void (*tree_unselect_row) (GtkCTree     *ctree,
  130.                  GtkCTreeNode *row,
  131.                  gint          column);
  132.   void (*tree_expand)       (GtkCTree     *ctree,
  133.                  GtkCTreeNode *node);
  134.   void (*tree_collapse)     (GtkCTree     *ctree,
  135.                  GtkCTreeNode *node);
  136.   void (*tree_move)         (GtkCTree     *ctree,
  137.                  GtkCTreeNode *node,
  138.                  GtkCTreeNode *new_parent,
  139.                  GtkCTreeNode *new_sibling);
  140.   void (*change_focus_row_expansion) (GtkCTree *ctree,
  141.                       GtkCTreeExpansionType action);
  142. };
  143.  
  144. struct _GtkCTreeRow
  145. {
  146.   GtkCListRow row;
  147.   
  148.   GtkCTreeNode *parent;
  149.   GtkCTreeNode *sibling;
  150.   GtkCTreeNode *children;
  151.   
  152.   GdkPixmap *pixmap_closed;
  153.   GdkBitmap *mask_closed;
  154.   GdkPixmap *pixmap_opened;
  155.   GdkBitmap *mask_opened;
  156.   
  157.   guint16 level;
  158.   
  159.   guint is_leaf  : 1;
  160.   guint expanded : 1;
  161. };
  162.  
  163. struct _GtkCTreeNode {
  164.   GList list;
  165. };
  166.  
  167.  
  168. /***********************************************************
  169.  *           Creation, insertion, deletion                 *
  170.  ***********************************************************/
  171.  
  172. GtkType gtk_ctree_get_type                       (void);
  173. void gtk_ctree_construct                         (GtkCTree     *ctree,
  174.                           gint          columns, 
  175.                           gint          tree_column,
  176.                           gchar        *titles[]);
  177. GtkWidget * gtk_ctree_new_with_titles            (gint          columns, 
  178.                           gint          tree_column,
  179.                           gchar        *titles[]);
  180. GtkWidget * gtk_ctree_new                        (gint          columns, 
  181.                           gint          tree_column);
  182. GtkCTreeNode * gtk_ctree_insert_node             (GtkCTree     *ctree,
  183.                           GtkCTreeNode *parent, 
  184.                           GtkCTreeNode *sibling,
  185.                           gchar        *text[],
  186.                           guint8        spacing,
  187.                           GdkPixmap    *pixmap_closed,
  188.                           GdkBitmap    *mask_closed,
  189.                           GdkPixmap    *pixmap_opened,
  190.                           GdkBitmap    *mask_opened,
  191.                           gboolean      is_leaf,
  192.                           gboolean      expanded);
  193. void gtk_ctree_remove_node                       (GtkCTree     *ctree, 
  194.                           GtkCTreeNode *node);
  195. GtkCTreeNode * gtk_ctree_insert_gnode            (GtkCTree          *ctree,
  196.                           GtkCTreeNode      *parent,
  197.                           GtkCTreeNode      *sibling,
  198.                           GNode             *gnode,
  199.                           GtkCTreeGNodeFunc  func,
  200.                           gpointer           data);
  201. GNode * gtk_ctree_export_to_gnode                (GtkCTree          *ctree,
  202.                           GNode             *parent,
  203.                           GNode             *sibling,
  204.                           GtkCTreeNode      *node,
  205.                           GtkCTreeGNodeFunc  func,
  206.                           gpointer           data);
  207.  
  208. /***********************************************************
  209.  *  Generic recursive functions, querying / finding tree   *
  210.  *  information                                            *
  211.  ***********************************************************/
  212.  
  213. void gtk_ctree_post_recursive                    (GtkCTree     *ctree, 
  214.                           GtkCTreeNode *node,
  215.                           GtkCTreeFunc  func,
  216.                           gpointer      data);
  217. void gtk_ctree_post_recursive_to_depth           (GtkCTree     *ctree, 
  218.                           GtkCTreeNode *node,
  219.                           gint          depth,
  220.                           GtkCTreeFunc  func,
  221.                           gpointer      data);
  222. void gtk_ctree_pre_recursive                     (GtkCTree     *ctree, 
  223.                           GtkCTreeNode *node,
  224.                           GtkCTreeFunc  func,
  225.                           gpointer      data);
  226. void gtk_ctree_pre_recursive_to_depth            (GtkCTree     *ctree, 
  227.                           GtkCTreeNode *node,
  228.                           gint          depth,
  229.                           GtkCTreeFunc  func,
  230.                           gpointer      data);
  231. gboolean gtk_ctree_is_viewable                   (GtkCTree     *ctree, 
  232.                               GtkCTreeNode *node);
  233. GtkCTreeNode * gtk_ctree_last                    (GtkCTree     *ctree,
  234.                               GtkCTreeNode *node);
  235. GtkCTreeNode * gtk_ctree_find_node_ptr           (GtkCTree     *ctree,
  236.                               GtkCTreeRow  *ctree_row);
  237. GtkCTreeNode * gtk_ctree_node_nth                (GtkCTree     *ctree,
  238.                           guint         row);
  239. gboolean gtk_ctree_find                          (GtkCTree     *ctree,
  240.                               GtkCTreeNode *node,
  241.                               GtkCTreeNode *child);
  242. gboolean gtk_ctree_is_ancestor                   (GtkCTree     *ctree,
  243.                               GtkCTreeNode *node,
  244.                               GtkCTreeNode *child);
  245. GtkCTreeNode * gtk_ctree_find_by_row_data        (GtkCTree     *ctree,
  246.                               GtkCTreeNode *node,
  247.                               gpointer      data);
  248. /* returns a GList of all GtkCTreeNodes with row->data == data. */
  249. GList * gtk_ctree_find_all_by_row_data           (GtkCTree     *ctree,
  250.                           GtkCTreeNode *node,
  251.                           gpointer      data);
  252. GtkCTreeNode * gtk_ctree_find_by_row_data_custom (GtkCTree     *ctree,
  253.                           GtkCTreeNode *node,
  254.                           gpointer      data,
  255.                           GCompareFunc  func);
  256. /* returns a GList of all GtkCTreeNodes with row->data == data. */
  257. GList * gtk_ctree_find_all_by_row_data_custom    (GtkCTree     *ctree,
  258.                           GtkCTreeNode *node,
  259.                           gpointer      data,
  260.                           GCompareFunc  func);
  261. gboolean gtk_ctree_is_hot_spot                   (GtkCTree     *ctree,
  262.                               gint          x,
  263.                               gint          y);
  264.  
  265. /***********************************************************
  266.  *   Tree signals : move, expand, collapse, (un)select     *
  267.  ***********************************************************/
  268.  
  269. void gtk_ctree_move                              (GtkCTree     *ctree,
  270.                           GtkCTreeNode *node,
  271.                           GtkCTreeNode *new_parent, 
  272.                           GtkCTreeNode *new_sibling);
  273. void gtk_ctree_expand                            (GtkCTree     *ctree,
  274.                           GtkCTreeNode *node);
  275. void gtk_ctree_expand_recursive                  (GtkCTree     *ctree,
  276.                           GtkCTreeNode *node);
  277. void gtk_ctree_expand_to_depth                   (GtkCTree     *ctree,
  278.                           GtkCTreeNode *node,
  279.                           gint          depth);
  280. void gtk_ctree_collapse                          (GtkCTree     *ctree,
  281.                           GtkCTreeNode *node);
  282. void gtk_ctree_collapse_recursive                (GtkCTree     *ctree,
  283.                           GtkCTreeNode *node);
  284. void gtk_ctree_collapse_to_depth                 (GtkCTree     *ctree,
  285.                           GtkCTreeNode *node,
  286.                           gint          depth);
  287. void gtk_ctree_toggle_expansion                  (GtkCTree     *ctree,
  288.                           GtkCTreeNode *node);
  289. void gtk_ctree_toggle_expansion_recursive        (GtkCTree     *ctree,
  290.                           GtkCTreeNode *node);
  291. void gtk_ctree_select                            (GtkCTree     *ctree, 
  292.                           GtkCTreeNode *node);
  293. void gtk_ctree_select_recursive                  (GtkCTree     *ctree, 
  294.                           GtkCTreeNode *node);
  295. void gtk_ctree_unselect                          (GtkCTree     *ctree, 
  296.                           GtkCTreeNode *node);
  297. void gtk_ctree_unselect_recursive                (GtkCTree     *ctree, 
  298.                           GtkCTreeNode *node);
  299. void gtk_ctree_real_select_recursive             (GtkCTree     *ctree, 
  300.                           GtkCTreeNode *node, 
  301.                           gint          state);
  302.  
  303. /***********************************************************
  304.  *           Analogons of GtkCList functions               *
  305.  ***********************************************************/
  306.  
  307. void gtk_ctree_node_set_text                     (GtkCTree     *ctree,
  308.                           GtkCTreeNode *node,
  309.                           gint          column,
  310.                           const gchar  *text);
  311. void gtk_ctree_node_set_pixmap                   (GtkCTree     *ctree,
  312.                           GtkCTreeNode *node,
  313.                           gint          column,
  314.                           GdkPixmap    *pixmap,
  315.                           GdkBitmap    *mask);
  316. void gtk_ctree_node_set_pixtext                  (GtkCTree     *ctree,
  317.                           GtkCTreeNode *node,
  318.                           gint          column,
  319.                           const gchar  *text,
  320.                           guint8        spacing,
  321.                           GdkPixmap    *pixmap,
  322.                           GdkBitmap    *mask);
  323. void gtk_ctree_set_node_info                     (GtkCTree     *ctree,
  324.                           GtkCTreeNode *node,
  325.                           const gchar  *text,
  326.                           guint8        spacing,
  327.                           GdkPixmap    *pixmap_closed,
  328.                           GdkBitmap    *mask_closed,
  329.                           GdkPixmap    *pixmap_opened,
  330.                           GdkBitmap    *mask_opened,
  331.                           gboolean      is_leaf,
  332.                           gboolean      expanded);
  333. void gtk_ctree_node_set_shift                    (GtkCTree     *ctree,
  334.                           GtkCTreeNode *node,
  335.                           gint          column,
  336.                           gint          vertical,
  337.                           gint          horizontal);
  338. void gtk_ctree_node_set_selectable               (GtkCTree     *ctree,
  339.                           GtkCTreeNode *node,
  340.                           gboolean      selectable);
  341. gboolean gtk_ctree_node_get_selectable           (GtkCTree     *ctree,
  342.                           GtkCTreeNode *node);
  343. GtkCellType gtk_ctree_node_get_cell_type         (GtkCTree     *ctree,
  344.                           GtkCTreeNode *node,
  345.                           gint          column);
  346. gint gtk_ctree_node_get_text                     (GtkCTree     *ctree,
  347.                           GtkCTreeNode *node,
  348.                           gint          column,
  349.                           gchar       **text);
  350. gint gtk_ctree_node_get_pixmap                   (GtkCTree     *ctree,
  351.                           GtkCTreeNode *node,
  352.                           gint          column,
  353.                           GdkPixmap   **pixmap,
  354.                           GdkBitmap   **mask);
  355. gint gtk_ctree_node_get_pixtext                  (GtkCTree     *ctree,
  356.                           GtkCTreeNode *node,
  357.                           gint          column,
  358.                           gchar       **text,
  359.                           guint8       *spacing,
  360.                           GdkPixmap   **pixmap,
  361.                           GdkBitmap   **mask);
  362. gint gtk_ctree_get_node_info                     (GtkCTree     *ctree,
  363.                           GtkCTreeNode *node,
  364.                           gchar       **text,
  365.                           guint8       *spacing,
  366.                           GdkPixmap   **pixmap_closed,
  367.                           GdkBitmap   **mask_closed,
  368.                           GdkPixmap   **pixmap_opened,
  369.                           GdkBitmap   **mask_opened,
  370.                           gboolean     *is_leaf,
  371.                           gboolean     *expanded);
  372. void gtk_ctree_node_set_row_style                (GtkCTree     *ctree,
  373.                           GtkCTreeNode *node,
  374.                           GtkStyle     *style);
  375. GtkStyle * gtk_ctree_node_get_row_style          (GtkCTree     *ctree,
  376.                           GtkCTreeNode *node);
  377. void gtk_ctree_node_set_cell_style               (GtkCTree     *ctree,
  378.                           GtkCTreeNode *node,
  379.                           gint          column,
  380.                           GtkStyle     *style);
  381. GtkStyle * gtk_ctree_node_get_cell_style         (GtkCTree     *ctree,
  382.                           GtkCTreeNode *node,
  383.                           gint          column);
  384. void gtk_ctree_node_set_foreground               (GtkCTree     *ctree,
  385.                           GtkCTreeNode *node,
  386.                           GdkColor     *color);
  387. void gtk_ctree_node_set_background               (GtkCTree     *ctree,
  388.                           GtkCTreeNode *node,
  389.                           GdkColor     *color);
  390. void gtk_ctree_node_set_row_data                 (GtkCTree     *ctree,
  391.                           GtkCTreeNode *node,
  392.                           gpointer      data);
  393. void gtk_ctree_node_set_row_data_full            (GtkCTree     *ctree,
  394.                           GtkCTreeNode *node,
  395.                           gpointer      data,
  396.                           GtkDestroyNotify destroy);
  397. gpointer gtk_ctree_node_get_row_data             (GtkCTree     *ctree,
  398.                           GtkCTreeNode *node);
  399. void gtk_ctree_node_moveto                       (GtkCTree     *ctree,
  400.                           GtkCTreeNode *node,
  401.                           gint          column,
  402.                           gfloat        row_align,
  403.                           gfloat        col_align);
  404. GtkVisibility gtk_ctree_node_is_visible          (GtkCTree     *ctree,
  405.                           GtkCTreeNode *node);
  406.  
  407. /***********************************************************
  408.  *             GtkCTree specific functions                 *
  409.  ***********************************************************/
  410.  
  411. void gtk_ctree_set_indent            (GtkCTree                *ctree, 
  412.                       gint                     indent);
  413. void gtk_ctree_set_spacing           (GtkCTree                *ctree, 
  414.                       gint                     spacing);
  415. void gtk_ctree_set_show_stub         (GtkCTree                *ctree, 
  416.                       gboolean                 show_stub);
  417. void gtk_ctree_set_line_style        (GtkCTree                *ctree, 
  418.                       GtkCTreeLineStyle        line_style);
  419. void gtk_ctree_set_expander_style    (GtkCTree                *ctree, 
  420.                       GtkCTreeExpanderStyle    expander_style);
  421. void gtk_ctree_set_drag_compare_func (GtkCTree               *ctree,
  422.                       GtkCTreeCompareDragFunc  cmp_func);
  423.  
  424. /***********************************************************
  425.  *             Tree sorting functions                      *
  426.  ***********************************************************/
  427.  
  428. void gtk_ctree_sort_node                         (GtkCTree     *ctree, 
  429.                           GtkCTreeNode *node);
  430. void gtk_ctree_sort_recursive                    (GtkCTree     *ctree, 
  431.                           GtkCTreeNode *node);
  432.  
  433.  
  434.  
  435. #ifdef __cplusplus
  436. }
  437. #endif                /* __cplusplus */
  438.  
  439. #endif                /* __GTK_CTREE_H__ */
  440.